#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cerrno>
#include <cassert>
#include <string>
#include <unistd.h>
#include <signal.h>
// #include <sstream>
#include <sys/types.h>
using namespace std;
void handler(int signo)
{
    std::cout << "get a singal: " << signo << std::endl;
    // exit(2);
}

int main()
{
    // 1. 2号信号，进程的默认处理动作是终止进程
    // 2. signal 可以进行对指定的信号设定自定义处理动作
    // 3. signal(2, handler)调用完这个函数的时候，handler方法被调用了吗？没有！ 做了什么？只是更改了2号信号的处理动作，并没有调动handlder方法
    // 4. 那么handler方法，什么时候被调用？当2号信号产生的时候！
    // 5. 默认我们对2号信号的处理动作：终止进程，我们用signal(2, handler)， 我们在执行用户动作的自定义捕捉！

    // signal(SIGINT, handler);
    // signal(SIGQUIT, handler);

    // for(int i = 1; i <= 31; i++)
    // {
    //     signal(i, handler);
    // }
 
    int count=0;
    // int* p=nullptr;
    // *p=8;
    char* p=(char*)malloc(sizeof(char));
    printf("%p\n",p);
    int i=1;

    //cout<<*p<<endl;
    while(true)
    {
        i*=2;

        char* newp=(char*)realloc(p,i);
        // std::cout <<++count<< ":我是一个进程，我正在运行 ..., pid: " << getpid() << std::endl;
        // //sleep(1);
        printf("地址是：%p,申请了 %d Kb空间\n",newp,i);
        signal(SIGILL, handler);

    }

    return 0;
}